<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                > ### 學法算法生成 Id ~~~ package main import ( "fmt" "time" ) var ( machineID int64 // 機器 id 占10位, 十進制范圍是 [ 0, 1023 ] sn int64 // 序列號占 12 位,十進制范圍是 [ 0, 4095 ] lastTimeStamp int64 // 上次的時間戳(毫秒級), 1秒=1000毫秒, 1毫秒=1000微秒,1微秒=1000納秒 ) func init() { lastTimeStamp = time.Now().UnixNano() / 1000000 } func SetMachineId(mid int64) { // 把機器 id 左移 12 位,讓出 12 位空間給序列號使用 machineID = mid << 12 } func GetSnowflakeId() int64 { curTimeStamp := time.Now().UnixNano() / 1000000 // 同一毫秒 if curTimeStamp == lastTimeStamp { sn++ // 序列號占 12 位,十進制范圍是 [ 0, 4095 ] if sn > 4095 { time.Sleep(time.Millisecond) curTimeStamp = time.Now().UnixNano() / 1000000 lastTimeStamp = curTimeStamp sn = 0 } // 取 64 位的二進制數 0000000000 0000000000 0000000000 0001111111111 1111111111 1111111111 1 ( 這里共 41 個 1 )和時間戳進行并操作 // 并結果( 右數 )第 42 位必然是 0, 低 41 位也就是時間戳的低 41 位 rightBinValue := curTimeStamp & 0x1FFFFFFFFFF // 機器 id 占用10位空間,序列號占用12位空間,所以左移 22 位; 經過上面的并操作,左移后的第 1 位,必然是 0 rightBinValue <<= 22 id := rightBinValue | machineID | sn return id } if curTimeStamp > lastTimeStamp { sn = 0 lastTimeStamp = curTimeStamp // 取 64 位的二進制數 0000000000 0000000000 0000000000 0001111111111 1111111111 1111111111 1 ( 這里共 41 個 1 )和時間戳進行并操作 // 并結果( 右數 )第 42 位必然是 0, 低 41 位也就是時間戳的低 41 位 rightBinValue := curTimeStamp & 0x1FFFFFFFFFF // 機器 id 占用10位空間,序列號占用12位空間,所以左移 22 位; 經過上面的并操作,左移后的第 1 位,必然是 0 rightBinValue <<= 22 id := rightBinValue | machineID | sn return id } if curTimeStamp < lastTimeStamp { return 0 } return 0 } func main() { //設置機器Id(保證多服務再同一時間生成的Id不同) SetMachineId(1) id := GetSnowflakeId() fmt.Println(id) } ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看