Merge branch 'master' of git.kingsome.cn:server_common/q5

This commit is contained in:
aozhiwei 2023-08-11 13:12:50 +08:00
commit b62848491f
4 changed files with 270 additions and 0 deletions

88
convert.go Normal file
View File

@ -0,0 +1,88 @@
package q5
import (
"strconv"
"strings"
)
// ToInt converts a value to an integer.
func ToInt[T string | int | int64 | float32 | float64](value T) int {
var x interface{} = value
switch i := x.(type) {
case int:
return i
case int64:
return int(i)
case float32:
return int(i)
case float64:
return int(i)
case string:
intValue, err := strconv.Atoi(i)
if err != nil {
return 0
}
return intValue
}
return 0
}
// ToInt64 converts a value to an int64.
func ToInt64[T string | int | int64 | float32 | float64](value T) int64 {
var x interface{} = value
switch i := x.(type) {
case int:
return int64(i)
case int64:
return i
case float32:
return int64(i)
case float64:
return int64(i)
case string:
intValue, err := strconv.ParseInt(i, 10, 64)
if err != nil {
return 0
}
return intValue
}
return 0
}
// ToFloat converts a value to a float64.
func ToFloat[T string | int | int64 | float32 | float64](value T) float64 {
var x interface{} = value
switch i := x.(type) {
case int:
return float64(i)
case int64:
return float64(i)
case float32:
return float64(i)
case float64:
return i
case string:
f, _ := strconv.ParseFloat(strings.TrimSpace(i), 64)
return f
}
return 0.0
}
// ToString converts a value to a string.
func ToString[T string | int | int64 | float32 | float64](value T) string {
var x interface{} = value
switch i := x.(type) {
case int:
return strconv.Itoa(i)
case int64:
return strconv.FormatInt(i, 10)
case float32:
return strconv.FormatFloat(float64(i), 'f', -1, 32)
case float64:
return strconv.FormatFloat(i, 'f', -1, 64)
case string:
return i
}
return ""
}

134
convert_test.go Normal file
View File

@ -0,0 +1,134 @@
package q5
import (
"testing"
)
func TestToInt(t *testing.T) {
// int
var input int = 50
var expected int = 50
result := ToInt(input)
if expected != result {
t.Errorf("For input %v, expected %d, but got %d", input, expected, result)
}
// int64
var input2 int64 = 50000
var expected2 int = 50000
result2 := ToInt(input2)
if expected2 != result2 {
t.Errorf("For input %v, expected %d, but got %d", input2, expected2, result2)
}
// float
var input3 float64 = 3.14
var expected3 int = 3
result3 := ToInt(input3)
if expected3 != result3 {
t.Errorf("For input %v, expected %d, but got %d", input3, expected3, result3)
}
}
func TestToInt64(t *testing.T) {
// int
var input int = 50
var expected int64 = 50
result := ToInt64(input)
if expected != result {
t.Errorf("For input %v, expected %v, but got %v", input, expected, result)
}
// int64
var input2 int64 = 50000
var expected2 int64 = 50000
result2 := ToInt64(input2)
if expected2 != result2 {
t.Errorf("For input %v, expected %v, but got %v", input2, expected2, result2)
}
// float
var input3 float64 = 3.14
var expected3 int64 = 3
result3 := ToInt64(input3)
if expected3 != result3 {
t.Errorf("For input %v, expected %v, but got %v", input3, expected3, result3)
}
// string
var input4 string = "100108454613"
var expected4 int64 = 100108454613
result4 := ToInt64(input4)
if expected4 != result4 {
t.Errorf("For input %v, expected %v, but got %v", input4, expected4, result4)
}
}
func TestToFloat(t *testing.T) {
// int
var input int = 50
var expected float64 = 50
result := ToFloat(input)
if expected != result {
t.Errorf("For input %v, expected %v, but got %v", input, expected, result)
}
// int64
var input2 int64 = 50000
var expected2 float64 = 50000
result2 := ToFloat(input2)
if expected2 != result2 {
t.Errorf("For input %v, expected %v, but got %v", input2, expected2, result2)
}
// float
var input3 float64 = 3.14
var expected3 float64 = 3.14
result3 := ToFloat(input3)
if expected3 != result3 {
t.Errorf("For input %v, expected %v, but got %v", input3, expected3, result3)
}
// string
var input4 string = "100108454613"
var expected4 float64 = 100108454613
result4 := ToFloat(input4)
if expected4 != result4 {
t.Errorf("For input %v, expected %v, but got %v", input4, expected4, result4)
}
}
func TestToString(t *testing.T) {
// int
var input int = 50
var expected string = "50"
result := ToString(input)
if expected != result {
t.Errorf("For input %v, expected %s, but got %s", input, expected, result)
}
// int64
var input2 int64 = 50000
expected2 := "50000"
result2 := ToString(input2)
if expected2 != result2 {
t.Errorf("For input %v, expected %v, but got %v", input2, expected2, result2)
}
// float
var input3 float64 = 3.14
var expected3 string = "3.14"
result3 := ToString(input3)
if expected3 != result3 {
t.Errorf("For input %v, expected %v, but got %v", input3, expected3, result3)
}
// string
input4 := "apple"
expected4 := "apple"
result4 := ToString(input4)
if expected4 != result4 {
t.Errorf("For input %v, expected %v, but got %v", input4, expected4, result4)
}
}

33
local_ip.go Normal file
View File

@ -0,0 +1,33 @@
package q5
import (
"fmt"
"net"
)
func GetLocalIP() (string, error) {
interfaces, err := net.Interfaces()
if err != nil {
return "", err
}
for _, iface := range interfaces {
if iface.Flags&net.FlagUp == 0 || iface.Flags&net.FlagLoopback != 0 {
continue
}
addrs, err := iface.Addrs()
if err != nil {
return "", err
}
for _, addr := range addrs {
ipnet, ok := addr.(*net.IPNet)
if !ok || ipnet.IP.IsLoopback() {
continue
}
if ipnet.IP.To4() != nil {
return ipnet.IP.String(), nil
}
}
}
return "", fmt.Errorf("无法获取本机有效的IP地址")
}

15
local_ip_test.go Normal file
View File

@ -0,0 +1,15 @@
package q5
import (
"fmt"
"testing"
)
func TestGetLocalIP(t *testing.T) {
ip, err := GetLocalIP()
if err != nil {
// 错误处理
t.Errorf("local ip %v error:%s", ip, err)
}
fmt.Printf("local ip:[%s]\n", ip)
}