main.go 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325
  1. package main
  2. import (
  3. "encoding/hex"
  4. "errors"
  5. "github.com/tjfoc/gmsm/sm3"
  6. "reflect"
  7. )
  8. func main() {
  9. s := new(string)
  10. if s == nil {
  11. VarAssignment(s, "/home")
  12. }
  13. VarAssignment(s, "/")
  14. println(*s)
  15. }
  16. // VarAssignment 变量赋值
  17. func VarAssignment(to, from any) error {
  18. var oldTv, oldFv, tv, fv reflect.Value
  19. tv = reflect.ValueOf(to)
  20. fv = reflect.ValueOf(from)
  21. if _, ok := to.(reflect.Value); ok {
  22. tv = to.(reflect.Value)
  23. }
  24. if _, ok := from.(reflect.Value); ok {
  25. fv = from.(reflect.Value)
  26. }
  27. if _, ok := to.(*reflect.Value); ok {
  28. tv = *(to.(*reflect.Value))
  29. }
  30. if _, ok := from.(*reflect.Value); ok {
  31. fv = *(from.(*reflect.Value))
  32. }
  33. oldTv = tv
  34. oldFv = fv
  35. if tv.IsNil() {
  36. return errors.New("The target data cannot be nil\n")
  37. }
  38. // 判断目标变量类型是否为指针类型,非指针类型返回错误
  39. if tv.Kind() == reflect.Ptr {
  40. tv = tv.Elem()
  41. } else {
  42. return errors.New("The target variable must be of pointer type ")
  43. }
  44. if fv.Kind() == reflect.Ptr {
  45. fv = fv.Elem()
  46. }
  47. // 判断目标变量类型和原变量类型是否一致
  48. if oldTv.Type().Elem().Kind() != fv.Kind() {
  49. return errors.New("Inconsistent data types ")
  50. }
  51. // 判断来源变量是否为空指针,如果为空指针则直接退出
  52. if oldFv.IsZero() && oldFv.Kind() == reflect.Ptr {
  53. return nil
  54. }
  55. // 判断目标变量是否为空,如果为空则创建内存空间
  56. if oldTv.IsZero() {
  57. val := reflect.New(oldTv.Type().Elem())
  58. oldTv.Set(val)
  59. }
  60. oldTv.Elem().Set(fv)
  61. return nil
  62. }
  63. func SM3SUM(in string) string {
  64. sm3Sum := sm3.Sm3Sum([]byte(in))
  65. return hex.EncodeToString(sm3Sum)
  66. }
  67. //package main
  68. //
  69. //import (
  70. // "fmt"
  71. // "net"
  72. //)
  73. //
  74. //func main() {
  75. // netInterfaces, err := net.Interfaces()
  76. // if err != nil {
  77. // fmt.Println("net.Interfaces failed, err:", err.Error())
  78. // return
  79. // }
  80. //
  81. // for i := 0; i < len(netInterfaces); i++ {
  82. // if (netInterfaces[i].Flags & net.FlagUp) != 0 {
  83. // addrs, _ := netInterfaces[i].Addrs()
  84. // for _, address := range addrs {
  85. // if ipnet, ok := address.(*net.IPNet); ok && !ipnet.IP.IsLoopback() {
  86. // if ipnet.IP.To4() != nil {
  87. //// fmt.Println(netInterfaces[i].Name)
  88. // fmt.Println(ipnet.IP.String())
  89. // }
  90. // }
  91. // }
  92. // }
  93. // }
  94. //
  95. // return
  96. //}
  97. //import (
  98. // "fmt"
  99. // "github.com/gin-gonic/gin"
  100. // "github.com/xuri/excelize/v2"
  101. // "net/http"
  102. //)
  103. //
  104. //func main() {
  105. // r := gin.Default()
  106. // r.POST("/upload", func(c *gin.Context) {
  107. // file, err := c.FormFile("file") // 假设表单字段名为"file"
  108. // if err != nil {
  109. // c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
  110. // return
  111. // }
  112. //
  113. // // 保存上传的文件到本地临时目录
  114. // tempFile, err := file.Open()
  115. // if err != nil {
  116. // c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
  117. // return
  118. // }
  119. // defer tempFile.Close()
  120. //
  121. // // 使用excelize解析Excel文件
  122. // f, err := excelize.OpenReader(tempFile)
  123. // if err != nil {
  124. // c.JSON(http.StatusInternalServerError, gin.H{"error": "Failed to open Excel file."})
  125. // return
  126. // }
  127. //
  128. // // 示例:读取第一个工作表的第一行数据
  129. // sheetName := f.GetSheetName(0)
  130. // rows, err := f.GetRows(sheetName)
  131. // if err != nil {
  132. // c.JSON(http.StatusInternalServerError, gin.H{"error": "Failed to read rows from Excel."})
  133. // return
  134. // }
  135. //
  136. // // 处理数据,这里简单打印出来
  137. // for _, row := range rows {
  138. // fmt.Println(row)
  139. // }
  140. //
  141. // c.JSON(http.StatusOK, gin.H{"message": "File uploaded and parsed successfully!"})
  142. // })
  143. //
  144. // r.Run(":8080") // 启动服务器
  145. //}
  146. //package main
  147. //
  148. //import (
  149. // "os"
  150. // "text/template"
  151. //)
  152. //
  153. //type Config struct {
  154. // ImageURL string
  155. // ScriptURL string
  156. // ISO string
  157. //}
  158. //
  159. //func main() {
  160. // // 创建一个Config对象,用于替换模板中的字段
  161. // config := Config{
  162. // ImageURL: "http://example.com/images",
  163. // ScriptURL: "http://example.com/scripts",
  164. // ISO: "ubuntu.iso",
  165. // }
  166. //
  167. // // 模板字符串
  168. // templateStr := `#!ipxe
  169. //dhcp
  170. //
  171. //set base-url {{ .ImageURL }} #请替换为镜像所在的HTTP文件服务器地址
  172. //
  173. //set ks-file {{ .ScriptURL }} # 替换为你的 Kickstart 文件所在的 HTTP 服务器地址
  174. //
  175. //set iso {{.ISO}}
  176. //
  177. //kernel ${base-url}/images/pxeboot/vmlinuz initrd=initrd.img inst.repo=${base-url} ip=dhcp ks=${ks-url} # 指定 Kickstart 文件的位置和参数
  178. //initrd ${base-url}/images/pxeboot/initrd.img
  179. //boot
  180. //`
  181. //
  182. // // 创建模板对象
  183. // tmpl, err := template.New("ipxeTemplate").Parse(templateStr)
  184. // if err != nil {
  185. // panic(err)
  186. // }
  187. // create, _ := os.Create("auto.ipxe")
  188. // // 执行模板并输出结果
  189. // if err := tmpl.Execute(create, config); err != nil {
  190. // panic(err)
  191. // }
  192. //}
  193. // func main() {
  194. // nums := []int{}
  195. // for _, num := range nums {
  196. // println(num)
  197. // }
  198. // }
  199. /*package main
  200. import (
  201. "fmt"
  202. "os"
  203. )
  204. // FileContent 结构体用于存储文件名和内容
  205. type FileContent struct {
  206. FileName string
  207. Content string
  208. }
  209. func main() {
  210. dir := "D:\\GolandProjects\\demo3\\demo3.8" // 替换为实际的文件夹路径
  211. files, err := os.ReadDir(dir)
  212. if err != nil {
  213. fmt.Println("Error reading directory:", err)
  214. return
  215. }
  216. var fileContents []FileContent
  217. for _, file := range files {
  218. if file.IsDir() {
  219. continue // 忽略文件夹
  220. }
  221. fileName := file.Name()
  222. filePath := dir + "/" + fileName
  223. content, err := os.ReadFile(filePath)
  224. if err != nil {
  225. fmt.Println("Error reading file:", err)
  226. continue
  227. }
  228. fileContents = append(fileContents, FileContent{
  229. FileName: fileName,
  230. Content: string(content),
  231. })
  232. }
  233. // 打印文件名和内容
  234. for _, fc := range fileContents {
  235. fmt.Println("File Name:", fc.FileName)
  236. fmt.Println("Content:", fc.Content)
  237. fmt.Println()
  238. }
  239. }*/
  240. //package main
  241. //
  242. //import (
  243. // "fmt"
  244. // "strings"
  245. //)
  246. //
  247. //func main() {
  248. // baseURL := "http://172.17.103.111:8080/file/images/ipxe/centos-min/cas.ipxe"
  249. // lastSlashIndex := strings.LastIndex(baseURL, "/")
  250. // if lastSlashIndex != -1 {
  251. // baseURL = baseURL[:lastSlashIndex]
  252. // }
  253. // fmt.Println(baseURL)
  254. //}
  255. //package main
  256. //
  257. //import (
  258. // "fmt"
  259. // "net"
  260. //)
  261. //
  262. //func main() {
  263. // // 获取所有网络接口
  264. // ifaces, err := net.Interfaces()
  265. // if err != nil {
  266. // fmt.Println("Failed to get interfaces:", err)
  267. // return
  268. // }
  269. //
  270. // // 遍历网络接口
  271. // for _, iface := range ifaces {
  272. // fmt.Printf("Interface: %s\n", iface.Name)
  273. //
  274. // // 获取接口的所有地址
  275. // addrs, err := iface.Addrs()
  276. // if err != nil {
  277. // fmt.Println("Failed to get interface addresses:", err)
  278. // continue
  279. // }
  280. //
  281. // // 遍历并打印每个地址
  282. // for _, addr := range addrs {
  283. // var ip net.IP
  284. // switch v := addr.(type) {
  285. // case *net.IPNet:
  286. // ip = v.IP
  287. // case *net.IPAddr:
  288. // ip = v.IP
  289. // }
  290. //
  291. // // 排除IPv6地址和回环地址
  292. // if ip == nil || ip.IsLoopback() {
  293. // continue
  294. // }
  295. //
  296. // // 打印IP地址和MAC地址
  297. // fmt.Printf(" IP: %s\tMAC: %s\n", ip.String(), iface.HardwareAddr.String())
  298. // }
  299. // }
  300. //}