Ein Artikel, der den Maximalwert von Int in Go analysiert
Dieser Artikel wird von der Go-SpracheTutorial-Kolumne eingeführt, um den maximalen Wert von Int in Go vorzustellen. Ich hoffe, er wird Freunden in Not hilfreich sein!
Zusammenfassung:
import "math/bits"const ( MaxUint uint = (1 << bits.UintSize) - 1 MaxInt int = (1 << bits.UintSize) / 2 - 1 MinInt int = (1 << bits.UintSize) / -2)
Hintergrund:
Ich denke, Sie wissen, dass der Typ uint
die gleiche Größe hat wie uint32
oder uint64 code> , abhängig von Ihrer Plattform. Typischerweise wird die größenlose Version nur verwendet, wenn kein Risiko besteht, sich dem Maximum zu nähern, da die größenlose Version „native“ Typen verwenden kann, was von der Plattform abhängt, und tendenziell schneller ist. <code>uint
类型的大小与uint32
或uint64
相同,具体取决于您所在的平台。通常,只有在没有接近最大值风险的情况下,才会使用无尺寸的版本,因为没有尺寸规格的版本可以使用“本机”类型,这取决于平台,并且它往往更快。
请注意,更 “快” 是因为使用非本机类型需要处理器执行额外的数学计算和边界检查,以便模拟更大或更小的整数。因此,处理器(或编译器的优化代码)性能会比添加边界检查的代码要好。
话虽如此,在某些情况下,了解您正在使用的内容仍然很有用。
“math/bits“ 包中含有以字节为单位的uint
大小(译者注:UintSize )。要确定最大值,将 1
左移许多位,再减去 1。即:(1 << bits.UintSize) - 1
请注意,在计算 uint
的最大值时,您通常需要将其显式放入一个 uint
(或更大的类型)类型变量中,否则编译器可能会失败,因为它会默认尝试将该计算分配给一个有符号int
(很明显,它不适合),所以:
const MaxUint uint = (1 << bits.UintSize) - 1
这是您问题的直接答案,但您可能对一些相关的计算感兴趣。
根据 spec,uint
和 int
的大小始终相同。
uint
32 位或 64 位
int
与uint
大小相同
因此,我们也可以使用这个常量来确定 int
的最大值,方法是采用相同的答案并除以 2
,然后减去 1
。 即:(1 << bits.UintSize) / 2 - 1
以及 int
的最小值,通过将 1
移位那么多位并将结果除以 -2
。 即:(1 << bits.UintSize) / -2
总之:
** MaxUint: ** (1 << bits.UintSize) - 1
** MaxInt: ** (1 << bits.UintSize) / 2 - 1
** MinInt: ** (1 << bits.UintSize) / -2
uint
-Größe in Bytes (Anmerkung des Übersetzers: UintSize). Um den Maximalwert zu ermitteln, verschieben Sie 1
um mehrere Stellen nach links und subtrahieren 1. Das heißt: (1 << bits.UintSize) - 1
Bitte beachten Sie, dass Sie bei der Berechnung des Maximalwerts einesuint
diesen normalerweise explizit eingeben müssen in einer Variablen vom Typuint
(oder größer), andernfalls schlägt der Compiler möglicherweise fehl, da er standardmäßig versucht, die Berechnung einem signiertenint
zuzuweisen (was ganz offensichtlich der Fall ist). passt nicht), also:Dies ist eine direkte Antwort auf Ihre Frage, aber Sie könnten an einigen verwandten Berechnungen interessiert sein. Je nach Spezifikation sindpackage mainimport ( "fmt" "math" "math/bits" "runtime" "strconv")func main() { var mi32 int64 = math.MinInt32 var mi64 int64 = math.MinInt64 var i32 uint64 = math.MaxInt32 var ui32 uint64 = math.MaxUint32 var i64 uint64 = math.MaxInt64 var ui64 uint64 = math.MaxUint64 var ui uint64 = (1 << bits.UintSize) - 1 var i uint64 = (1<<bits.UintSize)/2 - 1 var mi int64 = (1 << bits.UintSize) / -2 fmt.Printf(" MinInt32: %d\n", mi32) fmt.Printf(" MaxInt32: %d\n", i32) fmt.Printf("MaxUint32: %d\n", ui32) fmt.Printf(" MinInt64: %d\n", mi64) fmt.Printf(" MaxInt64: %d\n", i64) fmt.Printf("MaxUint64: %d\n", ui64) fmt.Printf(" MaxUint: %d\n", ui) fmt.Printf(" MinInt: %d\n", mi) fmt.Printf(" MaxInt: %d\n", i) fmt.Println("MaxUint:", uint(math.MaxUint)) fmt.Println("MinInt:", math.MinInt) fmt.Println("MaxInt:", math.MaxInt) fmt.Println("系统架构:", runtime.Compiler, runtime.GOARCH, runtime.GOOS) fmt.Println("Int 大小:", strconv.IntSize)}Nach dem Login kopierenuint
undint
immer gleich groß.
🎜🎜uint
🎜 32-bit oder 64-bit 🎜🎜🎜int
🎜 Gleiche Größe wieuint
🎜🎜🎜Also, Wir können diese Konstante auch verwenden, um den Maximalwert einesint
zu bestimmen, indem wir dieselbe Antwort nehmen, durch2
dividieren und dann1
subtrahieren. Das heißt:(1 << bits.UintSize) / 2 - 1
🎜🎜 und der Mindestwert vonint
, durch Verschieben von1
Geben Sie so viele Ziffern ein und dividieren Sie das Ergebnis durch-2
. Das ist:(1 << bits.UintSize) / -2
🎜🎜Kurz gesagt: 🎜🎜** MaxUint: **(1 << bits.UintSize) - 1🎜🎜** MaxInt: **
(1 << bits.UintSize) / 2 - 1
🎜🎜** MinInt: **(1 << ; Bits .UintSize) / -2
🎜🎜Vollständiges Beispiel (sollte mit dem Bild unten übereinstimmen): 🎜🎜Ausgabe: 🎜rrreee🎜🎜🎜Originaladresse: https://stackoverflow.com/questions/ 6878...🎜 🎜Übersetzungsadresse: https://learnku.com/go/t/62359🎜🎜MinInt32: -2147483648 MaxInt32: 2147483647MaxUint32: 4294967295 MinInt64: -9223372036854775808 MaxInt64: 9223372036854775807MaxUint64: 18446744073709551615 MaxUint: 18446744073709551615 MinInt: -9223372036854775808 MaxInt: 9223372036854775807MaxUint: 18446744073709551615MinInt: -9223372036854775808MaxInt: 9223372036854775807系统架构: gc amd64 darwin Int 大小: 64Nach dem Login kopieren
Das obige ist der detaillierte Inhalt vonEin Artikel, der den Maximalwert von Int in Go analysiert. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



Das sichere Lesen und Schreiben von Dateien in Go ist von entscheidender Bedeutung. Zu den Richtlinien gehören: Überprüfen von Dateiberechtigungen, Schließen von Dateien mithilfe von Verzögerungen, Validieren von Dateipfaden, Verwenden von Kontext-Timeouts. Das Befolgen dieser Richtlinien gewährleistet die Sicherheit Ihrer Daten und die Robustheit Ihrer Anwendungen.

Wie konfiguriere ich Verbindungspooling für Go-Datenbankverbindungen? Verwenden Sie den DB-Typ im Datenbank-/SQL-Paket, um eine Datenbankverbindung zu erstellen. Legen Sie MaxOpenConns fest, um die maximale Anzahl gleichzeitiger Verbindungen festzulegen. Legen Sie ConnMaxLifetime fest, um den maximalen Lebenszyklus der Verbindung festzulegen.

Das Go-Framework zeichnet sich durch seine hohen Leistungs- und Parallelitätsvorteile aus, weist jedoch auch einige Nachteile auf, z. B. dass es relativ neu ist, über ein kleines Entwickler-Ökosystem verfügt und einige Funktionen fehlen. Darüber hinaus können schnelle Änderungen und Lernkurven von Framework zu Framework unterschiedlich sein. Das Gin-Framework ist aufgrund seines effizienten Routings, der integrierten JSON-Unterstützung und der leistungsstarken Fehlerbehandlung eine beliebte Wahl für die Erstellung von RESTful-APIs.

So verwenden Sie Gomega für Behauptungen beim Golang-Unit-Testing. Beim Golang-Unit-Testing ist Gomega eine beliebte und leistungsstarke Assertionsbibliothek, die umfangreiche Assertionsmethoden bereitstellt, damit Entwickler Testergebnisse einfach überprüfen können. Installieren Sie Gomegagoget-ugithub.com/onsi/gomega. Verwenden Sie Gomega für Behauptungen. Hier sind einige häufige Beispiele für die Verwendung von Gomega für Behauptungen: 1. Import von Gleichheitszusicherungen „github.com/onsi/gomega“ funcTest_MyFunction(t*testing.T){

Best Practices: Erstellen Sie benutzerdefinierte Fehler mit klar definierten Fehlertypen (Fehlerpaket). Stellen Sie weitere Details bereit. Protokollieren Sie Fehler ordnungsgemäß. Geben Sie Fehler korrekt weiter und vermeiden Sie das Ausblenden oder Unterdrücken. Wrappen Sie Fehler nach Bedarf, um Kontext hinzuzufügen

JSON-Daten können mithilfe der gjson-Bibliothek oder der json.Unmarshal-Funktion in einer MySQL-Datenbank gespeichert werden. Die gjson-Bibliothek bietet praktische Methoden zum Parsen von JSON-Feldern, und die Funktion json.Unmarshal erfordert einen Zieltypzeiger zum Unmarshalieren von JSON-Daten. Bei beiden Methoden müssen SQL-Anweisungen vorbereitet und Einfügevorgänge ausgeführt werden, um die Daten in der Datenbank beizubehalten.

Der Unterschied zwischen dem GoLang-Framework und dem Go-Framework spiegelt sich in der internen Architektur und den externen Funktionen wider. Das GoLang-Framework basiert auf der Go-Standardbibliothek und erweitert deren Funktionalität, während das Go-Framework aus unabhängigen Bibliotheken besteht, um bestimmte Zwecke zu erreichen. Das GoLang-Framework ist flexibler und das Go-Framework ist einfacher zu verwenden. Das GoLang-Framework hat einen leichten Leistungsvorteil und das Go-Framework ist skalierbarer. Fall: Gin-Gonic (Go-Framework) wird zum Erstellen der REST-API verwendet, während Echo (GoLang-Framework) zum Erstellen von Webanwendungen verwendet wird.

So beheben Sie häufige Sicherheitsprobleme im Go-Framework Angesichts der weit verbreiteten Einführung des Go-Frameworks in der Webentwicklung ist die Gewährleistung seiner Sicherheit von entscheidender Bedeutung. Im Folgenden finden Sie eine praktische Anleitung zur Lösung häufiger Sicherheitsprobleme mit Beispielcode: 1. SQL-Injection Verwenden Sie vorbereitete Anweisungen oder parametrisierte Abfragen, um SQL-Injection-Angriffe zu verhindern. Beispiel: constquery="SELECT*FROMusersWHEREusername=?"stmt,err:=db.Prepare(query)iferr!=nil{//Handleerror}err=stmt.QueryR
